package programmierung.aufgabe5;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Reflection {

	// gibt die Oberklasse zurueck
	public Class<?> getOberklasse(Class<?> clazz) {
		return clazz.getSuperclass();
	}

	// gibt die Methode ’ methodenname ’ ohne Parameter zurueck
	public Method getParameterloseMethode(Class<?> clazz, String methodenname)
			throws NoSuchMethodException, SecurityException {
		return clazz.getMethod(methodenname);
	}

	// gibt alle Instanzvariablen , die mit ’ praefix ’ beginnen , zurueck
	public Field[] getInstanzvariablenMitPraefix(Class<?> clazz, String praefix) {
		Field[] aFelder = clazz.getFields();
		Field[] felder = new Field[aFelder.length];
		int tIndex = 0;
		for (Field feld : aFelder) {
			if (feld.getName().startsWith(praefix)) {
				felder[tIndex] = feld;
				tIndex++;
			}

		}

		return trimFields(felder, tIndex);
	}

	private Field[] trimFields(Field[] felder, int size) {
		Field[] trimmedFields = new Field[size];

		for (int i = 0; i < trimmedFields.length; i++) {
			trimmedFields[i] = felder[i];
		}

		return trimmedFields;
	}

}
